home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE2m.s < prev    next >
Text File  |  1994-10-20  |  2KB  |  45 lines

  1.  
  2. ; Lezione2m.s
  3.  
  4. ; Dimostrazione che lavorando con i registri indirizzi a0...a7 si opera sempre
  5. ; su tutta la longword, sia con il consueto .L che con il .W.
  6.  
  7.  
  8. inizio:
  9.     move.l    #$FFFFFF,d0
  10.     ADDQ.W    #4,d0        ; Aggiungi.w 4 a d0, ma lavora solo sulla word
  11.                 ; perche' siamo su un registro DATI (lo stesso
  12.                 ; farebbe su una label)
  13.     lea    $FFFFFF,a0
  14.     ADDQ.W    #4,a0        ; Aggiungi.w 4 ad a0, ma lavorando su un
  15.                 ; registro INDIRIZZI l'add coinvolge tutto
  16.                 ; l'indirizzo, ossia la longword.
  17.     rts
  18.  
  19.     end
  20.  
  21. Provate a fare un debug di questo listato (AD) e passo passo noterete la
  22. differenza principale tra un registro indirizzi e un registro dati o qualsiasi
  23. label. Questa differenza e' che su registri indirizzi si lavora sempre su tutto
  24. l'indirizzo, ossia su tutta la longword, infatti non e' possibile operare con
  25. istruzioni .B su tali registri, e quando si lavora col .W (possibile solo nel
  26. caso che aggiungiamo/sottraiamo/muoviamo numeri piu' piccoli di una word) il
  27. risultato e' lo stesso di un .L. Dunque potete anche sempre usare il .L, ma
  28. nei casi in cui e' possibile conviene "OTTIMIZZARE" l'istruzione cambiandola
  29. in .W, dato che e' piu' veloce di quella .L.
  30. Facendo il DEBUG di questo listatino noterete che l'ADDQ.W #4,d0 opera solo
  31. sulla word, appunto, di D0, e lo cambia in $00FF0003, dato che dopo $FFFF
  32. riparte da capo la numerazione con $0000, poi arriva a $0003, ma non e'
  33. coinvolta la parte alta del numero.
  34. Se invece faceste un ADDQ.L #4,d0 (provate!) tale ADD coinvolgerebbe l'intera
  35. LONG, trasformandola in $01000003, infatti dopo $00FFFFFF viene $01000000.
  36. Invece operando su registri indirizzi l'ADD.W fa come l'ADD.L, solo che non
  37. puo' essere usato sempre, ad esempio non puo' essere usato per un numero come
  38. per esempio $123456. Nonostante non sia un errore, ricordatevi sempre di usare
  39. il .W anziche' il .L in queste istruzioni con i registri indirizzi per fare
  40. codice leggermente piu' veloce.
  41.  
  42.     ADD.L    #$123,a0    ; ottimizzabile in ADD.W #$123,a0
  43.     ADD.L    #$12345,a0    ; non ottimizzabile
  44.  
  45.